package p17_从advisor到aspect;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;

/**
 * 这是一个aspect是高级切面，包含多组 (切点 + 通知) 的组合
 * 一组 切点 + 通知， 又是一个advisor
 * spring最终会把一个高级切面转为一个个的低级切面，advisor
 * 下面这个aspect(MyAspect类)，有2组 切点 + 通知，也就是2个advisor
 */
@Aspect
public class MyAspect {
    @Before("execution(* foo())")
    public void before() {
        System.out.println("aspect1 before.....");
    }

    @After("execution(* foo())")
    public void after() {
        System.out.println("aspect1 after.....");
    }

    @Around("execution(* foo())")
    public void around(ProceedingJoinPoint point) throws Throwable {
        System.out.println("环绕前置");
        point.proceed();
        System.out.println("环绕后置");
    }

}
